home *** CD-ROM | disk | FTP | other *** search
- /*{{{}}}*/
- /*{{{ #includes*/
- #ifdef TERMINFO
- # ifdef INC_CURSES
- # include <curses.h>
- # endif
- # ifdef INC_TERM
- # include <term.h>
- # endif
- #else
- # include <termcap.h>
- #endif
- #include <string.h>
- #ifndef NO_GETOPT_H
- # include <getopt.h>
- #endif
- #include <stdlib.h>
- #include <stdio.h>
- #include <lib/ori_bool.h>
- #include <h/envvar_str.h>
- /*}}} */
-
- /*{{{ variables*/
- #ifdef TERMINFO
- # define DATABASE "terminfo"
- #else
- # define DATABASE "termcap"
- char termcap_area[1024];
- char bp[1024];
- char *pointer;
- #endif
- boolean list=False;
- /*}}} */
-
- /*{{{ error_exit*/
- void error_exit(char const * const m,char const * const t)
- {
- fprintf(stderr,m,t);
- exit(1);
- }
- /*}}} */
- /*{{{ create_alias*/
- #ifdef TERMINFO
- # define CREATE_ALIAS(c,i,a) create_alias(a,(unsigned char*)i)
- void create_alias(char const * const name, unsigned char const * code)
- #else
- # define CREATE_ALIAS(c,i,a) create_alias(a,c)
- void create_alias(char const * const name, char const * const cap)
- # endif
- {
- # ifndef TERMINFO
- unsigned char *code;
- code=(unsigned char*)tgetstr(cap,&pointer);
- # endif
- if (list)
- { printf("%s\n",name);
- return;
- }
- if (!code || !*code)
- { printf(" ;(alias %s ( $UNKNOWN )\n",name);
- return;
- }
- printf(" (alias %s (",name);
- while (*code)
- {
- if (*code==127)
- printf(" C-?");
- else if (*code>=' ')
- printf(" \"%c",*code);
- else
- printf(" C-%c",CTRL_CHARS[*code]);
- code++;
- }
- printf(" ))\n");
- }
- /*}}} */
-
- /*{{{ main*/
- int main(int argc, char *argv[])
- {
- /*{{{ variable declarations*/
- # ifdef TERMINFO
- int result;
- # endif
- char const *terminal;
- int c;
- extern char *optarg;
- extern int optind;
- boolean err=False;
- boolean no_term=False;
- /*}}} */
-
- /*{{{ parse arguments*/
- terminal=getenv("TERM");
- /*{{{ process options*/
- while ((c=getopt(argc,argv,"hlnt:"))!=-1)
- switch (c)
- {
- /*{{{ h*/
- case '?':
- case 'h':
- err=True;
- break;
- /*}}} */
- /*{{{ l*/
- case 'l':
- list=True;
- break;
- /*}}} */
- /*{{{ n*/
- case 'n':
- no_term=True;
- break;
- /*}}} */
- /*{{{ t*/
- case 't':
- terminal=optarg;
- break;
- /*}}} */
- }
- if (list)
- no_term=True;
- /*}}} */
- /*{{{ check usage*/
- if (err || optind<argc)
- error_exit("Usage: autoalias [-hln] [-t terminalname]\n",0);
- /*}}} */
- /*}}} */
- if (!terminal || !terminal[0])
- /*{{{ complain*/
- error_exit("autoalias: no environment variable TERM.\n",0);
- /*}}} */
- /*{{{ get terminal data*/
- switch
- (
- # ifdef TERMINFO
- (setupterm(terminal,2,&result),result)
- # else
- tgetent(bp,terminal)
- # endif
- )
- { case -1:
- error_exit("autoalias: cannot access " DATABASE " database for terminal %s.\n",terminal);
- case 0:
- error_exit("autoalias: no " DATABASE " entry for %s.\n",terminal);
- default:
- # ifndef TERMINFO
- pointer = termcap_area;
- # endif
- break;
- }
- /*}}} */
- if (!no_term)
- printf("(terminal (%s)\n",terminal);
- /*{{{ f0-f63*/
- CREATE_ALIAS("k0",key_f0,"f0");
- CREATE_ALIAS("k1",key_f1,"f1");
- CREATE_ALIAS("k2",key_f2,"f2");
- CREATE_ALIAS("k3",key_f3,"f3");
- CREATE_ALIAS("k4",key_f4,"f4");
- CREATE_ALIAS("k5",key_f5,"f5");
- CREATE_ALIAS("k6",key_f6,"f6");
- CREATE_ALIAS("k7",key_f7,"f7");
- CREATE_ALIAS("k8",key_f8,"f8");
- CREATE_ALIAS("k9",key_f9,"f9");
- CREATE_ALIAS("k;",key_f10,"f10");
- CREATE_ALIAS("F1",key_f11,"f11");
- CREATE_ALIAS("F2",key_f12,"f12");
- CREATE_ALIAS("F3",key_f13,"f13");
- CREATE_ALIAS("F4",key_f14,"f14");
- CREATE_ALIAS("F5",key_f15,"f15");
- CREATE_ALIAS("F6",key_f16,"f16");
- CREATE_ALIAS("F7",key_f17,"f17");
- CREATE_ALIAS("F8",key_f18,"f18");
- CREATE_ALIAS("F9",key_f19,"f19");
- CREATE_ALIAS("FA",key_f20,"f20");
- CREATE_ALIAS("FB",key_f21,"f21");
- CREATE_ALIAS("FC",key_f22,"f22");
- CREATE_ALIAS("FD",key_f23,"f23");
- CREATE_ALIAS("FE",key_f24,"f24");
- CREATE_ALIAS("FF",key_f25,"f25");
- CREATE_ALIAS("FG",key_f26,"f26");
- CREATE_ALIAS("FH",key_f27,"f27");
- CREATE_ALIAS("FI",key_f28,"f28");
- CREATE_ALIAS("FJ",key_f29,"f29");
- CREATE_ALIAS("FK",key_f30,"f30");
- CREATE_ALIAS("FL",key_f31,"f31");
- CREATE_ALIAS("FM",key_f32,"f32");
- # ifndef SMALL_TERMINFO
- CREATE_ALIAS("FN",key_f33,"f13");
- CREATE_ALIAS("FO",key_f34,"f34");
- CREATE_ALIAS("FP",key_f35,"f35");
- CREATE_ALIAS("FQ",key_f36,"f36");
- CREATE_ALIAS("FR",key_f37,"f37");
- CREATE_ALIAS("FS",key_f38,"f38");
- CREATE_ALIAS("FT",key_f39,"f39");
- CREATE_ALIAS("FU",key_f40,"f40");
- CREATE_ALIAS("FV",key_f41,"f41");
- CREATE_ALIAS("FW",key_f42,"f42");
- CREATE_ALIAS("FX",key_f43,"f43");
- CREATE_ALIAS("FY",key_f44,"f44");
- CREATE_ALIAS("FZ",key_f45,"f45");
- CREATE_ALIAS("Fa",key_f46,"f46");
- CREATE_ALIAS("Fb",key_f47,"f47");
- CREATE_ALIAS("Fc",key_f48,"f48");
- CREATE_ALIAS("Fd",key_f49,"f49");
- CREATE_ALIAS("Fe",key_f50,"f50");
- CREATE_ALIAS("Ff",key_f51,"f51");
- CREATE_ALIAS("Fg",key_f52,"f52");
- CREATE_ALIAS("Fh",key_f53,"f53");
- CREATE_ALIAS("Fi",key_f54,"f54");
- CREATE_ALIAS("Fj",key_f55,"f55");
- CREATE_ALIAS("Fk",key_f56,"f56");
- CREATE_ALIAS("Fl",key_f57,"f57");
- CREATE_ALIAS("Fm",key_f58,"f58");
- CREATE_ALIAS("Fn",key_f59,"f59");
- CREATE_ALIAS("Fo",key_f60,"f60");
- CREATE_ALIAS("Fp",key_f61,"f61");
- CREATE_ALIAS("Fq",key_f62,"f62");
- CREATE_ALIAS("Fr",key_f63,"f63");
- # endif
- /*}}} */
- /*{{{ keypad*/
- CREATE_ALIAS("K1",key_a1,"upper_left_pad");
- CREATE_ALIAS("ku",key_up,"up");
- CREATE_ALIAS("K3",key_a3,"upper_right_pad");
- CREATE_ALIAS("kl",key_left,"left");
- # ifndef SMALL_TERMINFO
- CREATE_ALIAS("#4",key_sleft,"shift-left");
- # endif
- CREATE_ALIAS("K2",key_b2,"center_pad");
- CREATE_ALIAS("kr",key_right,"right");
- # ifndef SMALL_TERMINFO
- CREATE_ALIAS("%i",key_sright,"shift-right");
- # endif
- CREATE_ALIAS("K4",key_c1,"bottom_left_pad");
- CREATE_ALIAS("kd",key_down,"down");
- CREATE_ALIAS("K5",key_c3,"bottom_right_pad");
- /*}}} */
- /*{{{ move*/
- CREATE_ALIAS("kh",key_home,"home");
- # ifndef SMALL_TERMINFO
- CREATE_ALIAS("#2",key_shome,"shift-home");
- # endif
- CREATE_ALIAS("kH",key_ll,"home-down");
- # ifndef SMALL_TERMINFO
- CREATE_ALIAS("@1",key_beg,"begin");
- CREATE_ALIAS("&9",key_sbeg,"shift-begin");
- # endif
- CREATE_ALIAS("kP",key_ppage,"prev_page");
- # ifndef SMALL_TERMINFO
- CREATE_ALIAS("%8",key_previous,"previous-object");
- CREATE_ALIAS("%e",key_sprevious,"shift-previous");
- # endif
- CREATE_ALIAS("kN",key_npage,"next_page");
- # ifndef SMALL_TERMINFO
- CREATE_ALIAS("%5",key_next,"next-object");
- CREATE_ALIAS("%c",key_snext,"shift-next");
- CREATE_ALIAS("@7",key_end,"end");
- CREATE_ALIAS("*7",key_send,"shift-end");
- # endif
- CREATE_ALIAS("kR",key_sr,"scroll-up");
- CREATE_ALIAS("kF",key_sf,"scroll-down");
- /*}}} */
- /*{{{ clr/del/ins*/
- CREATE_ALIAS("kI",key_ic,"insert-char");
- CREATE_ALIAS("kb",key_backspace,"backspace");
- CREATE_ALIAS("kD",key_dc,"rubout");
- # ifndef SMALL_TERMINFO
- CREATE_ALIAS("*4",key_sdc,"shift-rubout");
- # endif
- CREATE_ALIAS("kA",key_il,"insert-line");
- CREATE_ALIAS("kL",key_dl,"delline");
- # ifndef SMALL_TERMINFO
- CREATE_ALIAS("*5",key_sdl,"shift-delline");
- # endif
- CREATE_ALIAS("kE",key_eol,"clreol");
- # ifndef SMALL_TERMINFO
- CREATE_ALIAS("*8",key_seol,"shift-clear-line");
- # endif
- CREATE_ALIAS("kS",key_eos,"clreos");
- CREATE_ALIAS("kC",key_clear,"clear-screen");
- /*}}} */
- /*{{{ tab*/
- # ifndef SMALL_TERMINFO
- CREATE_ALIAS("kB",key_btab,"back_tab");
- # endif
- CREATE_ALIAS("ka",key_catab,"clear-all-tabs");
- CREATE_ALIAS("kt",key_ctab,"clear-tab");
- CREATE_ALIAS("kT",key_stab,"set-tab");
- /*}}} */
- /*{{{ control*/
- # ifndef SMALL_TERMINFO
- CREATE_ALIAS("@2",key_cancel,"cancel");
- CREATE_ALIAS("&0",key_scancel,"shift-cancel");
- CREATE_ALIAS("@6",key_create,"create");
- CREATE_ALIAS("*3",key_screate,"shift-create");
- CREATE_ALIAS("%6",key_open,"open");
- CREATE_ALIAS("@3",key_close,"close");
- CREATE_ALIAS("@4",key_command,"command");
- CREATE_ALIAS("*1",key_scommand,"shift-command");
- CREATE_ALIAS("@8",key_enter,"send");
- CREATE_ALIAS("@9",key_exit,"exit");
- CREATE_ALIAS("*9",key_sexit,"shift-exit");
- CREATE_ALIAS("&6",key_save,"save");
- CREATE_ALIAS("!1",key_ssave,"shift-save");
- CREATE_ALIAS("&2",key_refresh,"refresh");
- CREATE_ALIAS("&4",key_restart,"restart");
- CREATE_ALIAS("%1",key_help,"help");
- CREATE_ALIAS("#1",key_shelp,"shift-help");
- CREATE_ALIAS("%3",key_message,"message");
- CREATE_ALIAS("%a",key_smessage,"shift-message");
- CREATE_ALIAS("%7",key_options,"options");
- CREATE_ALIAS("%d",key_soptions,"shift-options");
- CREATE_ALIAS("&5",key_resume,"resume");
- CREATE_ALIAS("*6",key_select,"select");
- CREATE_ALIAS("#3",key_sic,"shift-input");
- CREATE_ALIAS("%9",key_print,"print");
- CREATE_ALIAS("%f",key_sprint,"shift-print");
- CREATE_ALIAS("&1",key_reference,"reference");
- CREATE_ALIAS("%j",key_srsume,"shift-resume");
- CREATE_ALIAS("&7",key_suspend,"suspend");
- CREATE_ALIAS("!2",key_ssuspend,"shift-suspend");
- # endif
- /*}}} */
- /*{{{ edit*/
- # ifndef SMALL_TERMINFO
- CREATE_ALIAS("@5",key_copy,"copy");
- CREATE_ALIAS("*2",key_scopy,"shift-copy");
- CREATE_ALIAS("@0",key_find,"find");
- CREATE_ALIAS("*0",key_sfind,"shift-find");
- CREATE_ALIAS("%2",key_mark,"mark");
- CREATE_ALIAS("%4",key_move,"move");
- CREATE_ALIAS("%b",key_smove,"shift-move");
- CREATE_ALIAS("%0",key_redo,"redo");
- CREATE_ALIAS("%g",key_sredo,"shift-redo");
- CREATE_ALIAS("&3",key_replace,"replace");
- CREATE_ALIAS("%h",key_sreplace,"shift-replace");
- CREATE_ALIAS("&8",key_undo,"undo");
- CREATE_ALIAS("!3",key_sundo,"shift-undo");
- # endif
- /*}}} */
- if (!no_term)
- printf(")\n");
-
- exit(0);
- }
- /*}}} */
-